延伸昨天OpenVPN,介紹另一個VPN點對點的連接技術"WireGuard"。在這四千多行的程式中完成了更安全的加密與更簡易的配置,相較其他VPN方式又提升連接效能。
WireGuard在Linux 5.6版本併入核心,目前openwrt 21.02使用Linux kernel 5.4。不過都是基於linux的專案,因此使用與安裝沒有問題。且WireGuard已經可以在多個系統中運作,讓實務應用與配置度更靈活。
WireGuard是由Jason A. Donenfeld開發的開放原始碼VPN程式及協定[1],基於Linux核心實現,利用Curve25519進行金鑰交換,ChaCha20用於加密,Poly1305用於資料認證,BLAKE2用於雜湊函式運算[1],支援IPv4和IPv6的第3層。[2]WireGuard旨在獲得比IPsec和OpenVPN更好的效能[3]。
opkg update
opkg luci-proto-wireguard luci-app-wireguard luci-i18n-wireguard-zh-tw
mkdir /etc/wireguard
cd /etc/wireguard
umask 077
wg genkey | tee wg.key | wg pubkey > wg.pub
名稱 | 說明 |
---|---|
wg.key | server 私鑰 |
wg.pub | server 公鑰 |
用cat指令複製與記下金鑰
cat wg.key
cat wg.pub
回到luci介面設定(也可以使用命令介面)
/etc/init.d/network reload
建立新介面
防火牆規則
iptables -t nat -A POSTROUTING -s 192.168.20.1/24 -o eth0 -j MASQUERADE
開啟防火牆port
建立客戶端金鑰
mkdir 01
cd 01
建立共享金鑰,減少交握過程
wg genpsk > wgclient.psk
cat wgclient.psk
建立client端金鑰
wg genkey | tee wgclient.key | wg pubkey > wgclient.pub
名稱 | 說明 |
---|---|
wgclient.key | client 私鑰 |
wgclient.pub | client 公鑰 |
```
cat wgclient.key
cat wgclient.pub
```
![](https://i.imgur.com/iUUfxT2.png)
[Interface]
Address = 192.168.20.2
PrivateKey = wgclient.key值
DNS = 路由器IP
[Peer]
PublicKey = wg.pub值
AllowedIPs = 0.0.0.0 /0
PresharedKey = wgclient.psk值
如果啟用下面這行,表示只有192.168.2.0/24, 192.168.100.0/24這兩個IP走WireGuard
AllowedIPs = 192.168.2.0/24, 192.168.100.0/24
Endpoint = 實體IP:port(hotsname:port)
PersistentKeepalive = 25
先到WireGuard下載對應作業系統的軟體
匯入檔案並測試連線
tracert openwrt.org
traceroute openwrt.org
目前也還在翻車中,有看到已連線,但資訊封包流向可能不正確或是防火牆設定錯誤,所以一直在斷線之中。